/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.Controller;

import com.Model.AcervoConteudo;
import com.Model.AcervoRegistro;
import com.Model.Repositories.AcervoConteudoRepository;
import com.Model.Repositories.AcervoRegistroRepository;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.imageio.ImageIO;
import javax.swing.text.Document;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.rtf.RTFEditorKit;

/**
 *
 * @author Fellipe
 */
@ManagedBean
@ViewScoped
public class AcervoConteudos {

    private AcervoConteudo acervoConteudo;
    private AcervoRegistro registroAux;

    public AcervoRegistro getRegistroAux() {
        return registroAux;
    }

    public void setRegistroAux(AcervoRegistro registroAux) {
        this.registroAux = registroAux;
    }

    public AcervoConteudo getAcervoConteudo() {
        if (this.acervoConteudo == null) {
            this.acervoConteudo = new AcervoConteudo();
        }
        return this.acervoConteudo;
    }

    public AcervoRegistro buscaRegistro(Integer chave) {
        if (chave != null || chave == 0) {
            AcervoConteudo acon = new AcervoConteudoRepository().read(chave);
            if (acon.getChaveRegistro() != null) {
                registroAux = new AcervoRegistroRepository().read(acon.getChaveRegistro());
                return registroAux;
            } else {
                return new AcervoRegistro();
            }
        } else {
            return new AcervoRegistro();
        }
    }

    private String criaImagem(AcervoConteudo ac) {

        File arquivo = new File("C:/Users/Fellipe/Documents/NetBeansProjects/Acervo-Cliente/web/resources/imagens/miniaturas/" + ac.getValor());
        if (arquivo.exists()) {
            System.out.println("Miniatura ja existe");
        } else {
            try {
                ByteArrayInputStream bais = new ByteArrayInputStream(ac.getBlob());
                System.out.println(ac.getBlob().toString());
                System.out.println(bais.toString());
                System.out.println(ac.getRtf());
                System.out.println(arquivo.toString());
                ImageIO.write(ImageIO.read(bais), ac.getRtf(), arquivo);
                System.out.println("Miniatura " + ac.getValor() + " criada");
            } catch (IOException ex) {
                System.out.println(ex);
            }
        }

        return ac.getValor();

    }

    private String criaTextoLongo(AcervoConteudo ac) {

        StringWriter writer = new StringWriter();
        RTFEditorKit rtfParser = new RTFEditorKit();
        HTMLEditorKit htmlEditorKit = new HTMLEditorKit();
        Document document = rtfParser.createDefaultDocument();
        try {
            rtfParser.read(new ByteArrayInputStream(ac.getBlob()), document, 0);
            htmlEditorKit.write(writer, document, 0, document.getLength());
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return writer.toString();

    }

    public String pegaBlob(AcervoConteudo ac) {

        String retorno = null;

        if (ac.getBlob() != null) {
            if (ac.getCampo().getTipoCampo().getChaveTipoCampo() == 3) {
                return criaImagem(ac);
            } else if (ac.getCampo().getTipoCampo().getChaveTipoCampo() == 9) {
                return criaTextoLongo(ac);
            }
        } else {
            System.out.println("Blob Vazio!");
            return null;
        }
        System.out.println(retorno);
        return retorno;

    }
}
